跳到主要内容

故障恢复

删除一台broker的数据看效果会怎么样?

  1. 机器运行的时候直接删除一个节点的数据,删除前先查看下集群的情况。
bin/kafka-broker-api-versions.sh --bootstrap-server master1:9092,master2:9092,node1:9092
  1. 执行删除数据和日志
rm -rf /datadrive/kafka/log/*
rm -rf /home/bigdata/module/kafka_2.12-3.6.0/logs
  1. 删除以后查询集群信息报错。
bin/kafka-broker-api-versions.sh --bootstrap-server master1:9092,master2:9092,node1:9092

报错如下:

node1:9092 (id: 2 rack: null) -> ERROR: org.apache.kafka.common.errors.DisconnectException

  1. 执行生产者命令。
bin/kafka-console-producer.sh --topic test2 --bootstrap-server master1:9092,master2:9092,node1:9092

报错如下:

[2023-11-01 13:43:52,855] WARN [Producer clientId=console-producer] Error while fetching metadata with correlation id 16 : {test2=INVALID_REPLICATION_FACTOR} (org.apache.kafka.clients.NetworkClient)

  1. 其他的都不修改,重启集群,kafka_cluster.sh是作者本人写的集群启停脚本,现在的状态就是node1数据和日志都删除以后,先关闭,然后重启。
./kafka_cluster.sh start

发现集群启动正常

bin/kafka-broker-api-versions.sh --bootstrap-server master1:9092,master2:9092,node1:9092
  1. 测试集群的可用性。

消费之前的数据。先重置消费者组的offset。

bin/kafka-consumer-groups.sh --bootstrap-server master1:9092,master2:9092,node1:9092 --group testgroup --reset-offsets --to-earliest --execute --topic test1

执行消费。发现可以消费到。

bin/kafka-console-consumer.sh --topic test1 --bootstrap-server master1:9092,master2:9092,node1:9092 --group testgroup --from-beginning

测试生产者。

bin/kafka-console-producer.sh --topic test1 --bootstrap-server master1:9092,master2:9092,node1:9092

一切正常,之前删除的数据在node1也全部复制出来了。